package test;

import com.google.common.math.IntMath;
import org.junit.Test;

import java.math.RoundingMode;

/**
 * @author zengweilong
 * @date 4/30/21 4:55 PM
 */
public class GuavaUtils {

    @Test
    public void guavaTestLower() {

        // 加法
        System.out.println(IntMath.checkedAdd(5,3));
        // 加法 溢出不异常
        System.out.println(IntMath.saturatedAdd(5,3));

        // 减法
        System.out.println(IntMath.checkedSubtract(5,3));
        // 减法 溢出不异常
        System.out.println(IntMath.saturatedSubtract(5,3));

        // 乘法
        System.out.println(IntMath.checkedMultiply(9,3));
        // 乘法 溢出不异常
        System.out.println(IntMath.saturatedMultiply(5,3));

        // 除法 p / q
        System.out.println(IntMath.divide(10, 3, RoundingMode.CEILING));

        // 求方  5 * 5 * 5
        System.out.println(IntMath.checkedPow(2,3));
        // 求方  5 * 5 * 5 溢出不异常
        System.out.println(IntMath.saturatedPow(10,10));

    }

    @Test
    public void guavaTestMidden() {

        // 阶乘
        System.out.println(IntMath.factorial(5));

        // 求两个数的平均值
        System.out.println(IntMath.mean(3, 9));

        // 返回两个数的最大公约数
        System.out.println(IntMath.gcd(6, 10));

        // 取模运算
        System.out.println(IntMath.mod(5, 3));

    }

    @Test
    public void guavaTestHeight() {

        // 返回比参数中传递的值大的,  2的最小幂
        System.out.println(IntMath.ceilingPowerOfTwo(9));

        // 返回比参数中传递的值小的,  2的最大幂
        System.out.println(IntMath.floorPowerOfTwo(9));

        // 计算 log2(16)为 2*2*2*2 为 4
        System.out.println(IntMath.log2(16, RoundingMode.CEILING));

        // 计算 log10(100)为 10*10 为 2
        System.out.println(IntMath.log10(100, RoundingMode.CEILING));

        // 计算平方根
        System.out.println(IntMath.sqrt(16, RoundingMode.CEILING));

        // 计算二项式系数的值 (6 n)
        System.out.println(IntMath.binomial(6, 2));
    }


}
